package org.hibernate.tool.ipan.reveng;

import java.io.Writer;
import java.util.List;

import org.hibernate.mapping.Column;
import org.hibernate.mapping.ForeignKey;
import org.hibernate.mapping.PrimaryKey;
import org.hibernate.mapping.Table;
import org.hibernate.mapping.UniqueKey;


/**
 * 数据库反转工具接口
 * 
 * @author iPan
 * @version 2013-12-11
 */
public interface IDatabaseReverser {

	public void flush();

	public List<Table> getViewList();

	public List<Table> getTableList();

	public List<String> getViewNameList();

	public List<String> getTableNameList();

	public int getAllTableSize();

	public int getTableSize();

	public int getViewSize();

	public Table[] getAllTable();

	public Table getTable(String tableName);

	public Table getView(String tableName);

	public List<Column> getColumnList(String tableName);

	public PrimaryKey getPrimaryKey(String tableName);

	public List<ForeignKey> getForeignKey(String tableName);

	public List<UniqueKey> getUniqueKey(String tableName);

	public List<Table> matchTables(String tableName, MatchTableType mode);

	public void showAllTable(Writer out);

	public void showTable(Writer out);

	public void showView(Writer out);
	
	public void showColumn(String tableName, Writer out);

	public boolean isFlushed();
	
	public String getCatalog();
	
	public String getSchema();

}